// Partial 部分的
interface IPerson {
    name: string,
    age: number,
    gender: string
}


type PartialPerson = Partial<IPerson>

// Readonly 属性变为只读
type ReadOnlyPerson = Readonly<IPerson>

let p99: ReadOnlyPerson = {
    name: 'zc',
    age: 18,
    gender: 'M'
}
// p99.name =  'aa'

//  Pick 从一个类型中挑出属性 成为新的类型

type PickPerson = Pick<IPerson, 'age' | 'name'>

//  exclude 排除在外

type ExcludeType = Exclude<'a' | 'b', 'a' | 'c'>

// extract 提取共同的
type ExtractType = Extract<'a' | 'b', 'a' | 'c'>

//  从一个类型中剔除指定属性
type OmitPerson = Omit<IPerson, 'name'>

// Parameters 函数的参数  可以从一个函数类型中 函数参数的类型提取出来 放在一个元组中
type Fn = (arg: number, data: string) => Promise<string>

type Para = Parameters<Fn>

// ReturnType  提取一个函数类型的返回值的类型
type Retr = ReturnType<Fn>

interface ErrorConstructor {
    new(message?: string): Error;
    (message?: string): Error;
    readonly prototype: Error;
}

type ConstType = ConstructorParameters<ErrorConstructor>

export default null